package cn.xinfei.xdecision.common.service.enginex;


import cn.xinfei.xdecision.common.model.enginex.po.EngineVersion;
import cn.xinfei.xdecision.common.model.enginex.vo.EngineVersionInOutVarsRespVo;
import cn.xinfei.xdecision.common.model.enginex.vo.EngineVersionReqVo;
import cn.xinfei.xdecision.common.model.enginex.vo.EngineVersionRespVo;

import java.util.List;

public interface EngineVersionService {

    /**
     * 新建版本
     *
     * @param engineVersionReqVo 版本信息
     * @return 版本信息
     */
    EngineVersion copyAndCreateVersion(EngineVersionReqVo engineVersionReqVo);

    /**
     * 根据id查询决策流版本信息
     *
     * @param id 版本id
     * @return 决策流版本信息
     */
    EngineVersion getById(Long id);

    /**
     * 根据engineCode查询最大版本号
     *
     * @param engineCode 引擎编码
     * @return 最大版本号
     */
    Long getMaxVersionNo(String engineCode);

    /**
     * 根据engineCode、versionNo查询决策流版本信息
     *
     * @param engineCode 决策流code
     * @param versionNo  决策流版本号
     * @return 决策流版本信息
     */
    EngineVersion getByEngineCodeAndVersionNo(String engineCode, Long versionNo);

    List<EngineVersionRespVo> getEngineVersionListByEngineCode(String engineCode);

    /**
     * 获取引擎某个状态的版本
     */
    EngineVersion getVersionByStatus(String engineCode, Integer status);

    Long getVersionIdByStatus(String engineCode, Long engineVersionNo, Integer status);

    /**
     * 获取运行中版本信息
     *
     * @param engineCode 引擎编码
     * @return 运行中版本信息
     */
    EngineVersion getRunningVersion(String engineCode);

    List<EngineVersion> getRunningVersionList(String engineCode, long versionNo);

    /**
     * 获取最新版本信息
     *
     * @param engineCode 引擎编码
     * @return 最新的版本信息
     */
    EngineVersion getLatestEngineVersion(String engineCode);

    /**
     * 部署引擎，将引擎状态修改为运行中，并将目前运行中版本下线
     *
     * @param loginUserId        当前登陆用户：即审批上线用户
     * @param engineVersionReqVo
     * @return
     */
    boolean deployEngine(Long loginUserId, EngineVersionReqVo engineVersionReqVo);

    /**
     * 取消部署引擎，将引擎状态修改为已下线
     *
     * @param engineVersionReqVo
     * @return
     */
    boolean undeployEngine(EngineVersionReqVo engineVersionReqVo);

    /**
     * 清空画布，将节点信息全部删除
     *
     * @param engineVersionReqVo
     * @return true/false
     */
    boolean clear(EngineVersionReqVo engineVersionReqVo);

    /**
     * 查询引擎版本依赖的所有变量并分类.
     *
     * @return
     */
    EngineVersionInOutVarsRespVo getInOutVarList(String engineCode, Long versionNo, Long loginUserId);

    /**
     * 删除版本，只能删除状态为新建的版本
     */
    boolean deleteVersion(EngineVersionReqVo engineVersionReqVo);
}
